package com.atguigu.mybatis.mapper;

import com.atguigu.mybatis.beans.Employee;
import com.atguigu.mybatis.beans.MyParam;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.Map;

/**
 * Created by Smexy on 2023/3/22
 * <p>
 * sql中需要传入多个占位符如何解决?
 */
public interface EmployeeMapper3
{

    //方案一： 把多个参数封装为Bean ， #{bean的属性}
    @Select(" select * from employee where id = #{id} and gender = #{gender}")
    Employee getEmpById(MyParam param);

    //方案二： 把多个参数，封装到Map中， #{key}  方便
    @Select(" select * from employee where id = #{id} and gender = #{gender} and email= #{e}")
    Employee getEmpByIdWithMap(Map<String, Object> map);

    //方案三: 把参数拆散，声明在参数列表中。 方便
    @Select(" select * from employee where id = #{f} and gender = #{e}")
    Employee getEmpById2(@Param("a") Integer id, @Param("b") String gender, @Param("c") String a,
                         @Param("d") String b, @Param("e") String c, @Param("f") Integer d);


    /*
            ${} 和 #{} 都可以填充占位符。
                #{} 一般是在 where 后使用，在参数位置使用
                ${} 用于拼接sql，不会根据参数类型再对参数进行处理。
                    传入的是String类型的参数
                        #{}:   '字符串'
                        ${}:    字符串
     */
    @Select(" select * from ${t} where id = #{id} ")
    Employee getEmpById3(@Param("id") Integer id, @Param("t") String table);

}
